///*******************************************************************************
// * Copyright (c) 2004, 2006 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM - Initial API and implementation
// *******************************************************************************/
//package org.eclipse.core.tests.harness;
//
//import junit.framework.TestCase;
//import org.eclipse.core.runtime.CoreException;
//import org.eclipse.test.performance.Dimension;
//import org.eclipse.test.performance.Performance;
//import org.eclipse.test.performance.PerformanceMeter;
//
///**
// * Helper class for executing a performance test. Takes care of starting, stopping,
// * and commiting performance timers.
// */
//public abstract class PerformanceTestRunner {
//
//	private String regressionReason;
//	private String fingerprintName;
//
//	public void setRegressionReason(String comment) {
//		this.regressionReason = comment;
//	}
//
//	/**
//	 * Implemented by subclasses to perform the work to be measured.
//	 */
//	protected abstract void test();
//
//	/**
//	 * Executes the performance test the given number of times. Use the outer time
//	 * to execute the test several times in order to obtain a normalized average. Use
//	 * the inner loop for very fast tests that would otherwise be difficult to measure
//	 * due to Java's poor timer granularity.  The inner loop is not needed for long
//	 * tests that typically take more than a second to execute.
//	 * 
//	 * @param testCase The test that is running (used to obtain an appropriate meter)
//	 * @param outer The number of repetitions of the test.
//	 * @param inner The number of repetitions within the performance timer.
//	 */
//	public final void run(TestCase testCase, int outer, int inner) {
//		run(testCase, null, outer, inner);
//	}
//
//	/**
//	 * Executes the performance test the given number of times. Use the outer time
//	 * to execute the test several times in order to obtain a normalized average. Use
//	 * the inner loop for very fast tests that would otherwise be difficult to measure
//	 * due to Java's poor timer granularity.  The inner loop is not needed for long
//	 * tests that typically take more than a second to execute.
//	 * 
//	 * @param testCase The test that is running (used to obtain an appropriate meter)
//	 * @param localName the short name used to tag the local test
//	 * @param outer The number of repetitions of the test.
//	 * @param inner The number of repetitions within the performance timer.
//	 */
//	public final void run(TestCase testCase, String localName, int outer, int inner) {
//		Performance perf = Performance.getDefault();
//		PerformanceMeter meter = perf.createPerformanceMeter(perf.getDefaultScenarioId(testCase));
//		if (regressionReason != null)
//			perf.setComment(meter, Performance.EXPLAINS_DEGRADATION_COMMENT, regressionReason);
//		try {
//			for (int i = 0; i < outer; i++) {
//				setUp();
//				meter.start();
//				for (int j = 0; j < inner; j++)
//					test();
//				meter.stop();
//				tearDown();
//			}
//			if (localName != null)
//				Performance.getDefault().tagAsSummary(meter, localName, Dimension.ELAPSED_PROCESS);
//			if (fingerprintName != null)
//				perf.tagAsSummary(meter, fingerprintName, Dimension.ELAPSED_PROCESS);
//			meter.commit();
//			perf.assertPerformance(meter);
//		} catch (CoreException e) {
//			CoreTest.fail("Failed performance test", e);
//		} finally {
//			meter.dispose();
//		}
//	}
//
//	protected void setUp() throws CoreException {
//		// subclasses to override
//	}
//
//	protected void tearDown() throws CoreException {
//		// subclasses to override
//	}
//
//	/**
//	 * Sets the finger print name. Setting this value will make the test part
//	 * of the component finger print results.  A value of null indicates that the
//	 * test is not a finger print test.
//	 * @param fingerprintName
//	 */
//	public void setFingerprintName(String fingerprintName) {
//		this.fingerprintName = fingerprintName;
//	}
//}
